package org.jsola.hr.provider;

import org.jsola.hr.dto.RecruitXcxLoginByPhoneDTO;
import org.jsola.hr.dto.RecruitXcxLoginDTO;
import org.jsola.hr.vo.RecruitResultVO;
import org.jsola.recruit2.dto.CompanyUnitsAddDTO;
import org.jsola.recruit2.dto.JobSeekerUpdateDTO;
import org.jsola.recruit2.entity.BrokerDO;
import org.jsola.recruit2.entity.CompanyUnitsDO;
import org.jsola.recruit2.entity.JobSeekerDO;
import org.jsola.recruit2.vo.BrokerVO;
import org.jsola.user.core.TokenUser;
import org.jsola.user.dto.RecruitWechatXcxLoginDTO;
import org.jsola.user.dto.login.WechatXcxLoginDTO;
import org.jsola.user.vo.UserVO;

import java.util.List;

/**
 * @author JanusMix
 */
public interface IRecruitProviderService {

    /**
     * 获取所有的用工单位
     *
     * @param tokenUser 当前用户
     * @return 获取所有的用工单位
     */
    List<CompanyUnitsDO> getAllCompany(TokenUser tokenUser);

    /**
     * 获取所有的经纪人
     *
     * @param tokenUser 当前用户
     * @return 获取所有的经纪人
     */
    List<BrokerDO> getAllBroker(TokenUser tokenUser);

    /**
     * 保存用工单位
     *
     * @param companyUnitsAddDTO 用工单位新增实体类
     * @param tokenUser          当前用户
     * @return 用户手机号
     */
    CompanyUnitsDO saveCompany(CompanyUnitsAddDTO companyUnitsAddDTO, TokenUser tokenUser);

    /**
     * 解析获取手机号
     *
     * @param wechatXcxLoginDTO 小程序信息
     * @return 用户手机号
     */
    @Deprecated
    String getPhone(WechatXcxLoginDTO wechatXcxLoginDTO);

    /**
     * 解析登录信息 通过微信授权手机号
     *
     * @param recruitXcxLoginDTO 小程序信息
     * @param unionId            微信unionId
     * @return 登录信息
     */
    RecruitResultVO getPhone2(RecruitXcxLoginDTO recruitXcxLoginDTO, String unionId);

    /**
     * 解析登录信息 通过手机号验证码
     *
     * @param recruitXcxLoginByPhoneDTO 手机号验证码
     * @param unionId                   微信unionId
     * @return 登录信息
     */
    RecruitResultVO getPhoneAndCaptcha(RecruitXcxLoginByPhoneDTO recruitXcxLoginByPhoneDTO, String unionId);

    /**
     * 微信授权
     *
     * @param recruitWechatXcxLoginDTO 小程序信息
     * @return UserLoginVO
     */
    RecruitResultVO wechatRecruitLogin(RecruitWechatXcxLoginDTO recruitWechatXcxLoginDTO);

    /**
     * 微信授权2.0 先授权 无手机号注册再授权手机号
     *
     * @param recruitWechatXcxLoginDTO 小程序信息
     * @return UserLoginVO
     */
    RecruitResultVO wechatRecruitLogin2(RecruitWechatXcxLoginDTO recruitWechatXcxLoginDTO);


    /**
     * 创建用户信息 并绑定站点
     *
     * @param phone 手机号
     * @return 用户信息
     */
    UserVO getUserVoByPhone(String phone);


    /**
     * 求职者登录 校验邀请人
     *
     * @param recruitWechatXcxLoginDTO 登录信息
     * @param userId                   用户Id
     */
    JobSeekerDO verifyInviter(RecruitWechatXcxLoginDTO recruitWechatXcxLoginDTO, String userId);

    /**
     * 求职者登录 校验邀请人 允许无邀请进入
     *
     * @param recruitWechatXcxLoginDTO 登录信息
     * @param userId                   用户Id
     */
    JobSeekerDO verifyInviter2(RecruitWechatXcxLoginDTO recruitWechatXcxLoginDTO, String userId);

    /**
     * 小程序根据手机号查找经纪人表 跨站点
     *
     * @param phone 经纪人表id
     * @return 经纪人表
     */
    List<BrokerDO> selectBrokerByPhone(String phone);

    /**
     * 小程序根据手机号查找最后登录经纪人
     *
     * @param phone 经纪人表id
     * @return 经纪人表
     */
    BrokerVO selectLastBrokerByPhone(String phone);


    /**
     * 根据手机号查询第一个求职者（个人中心）
     *
     * @param phone 手机号
     * @return 求职者信息表
     */
    @Deprecated
    JobSeekerDO selectFirstOneSeekerByPhone(String phone);

    /**
     * 小程序根据经纪人表id查找  跨站点
     *
     * @param brokerId 经纪人表id
     * @return 经纪人表
     */
    BrokerDO selectBrokerByIdNotSiteId(String brokerId);

    /**
     * 修改求职者信息表
     *
     * @param jobSeekerUpdateDTO 修改求职者信息表DTO
     * @param tokenUser          当前用户
     * @return 更新数量
     */
    int updateJobSeeker(JobSeekerUpdateDTO jobSeekerUpdateDTO, TokenUser tokenUser);
}
